package m2.links;
import java.util.Observable;
import java.util.Observer;

import tools.Message;

import m2.connector.Connector;
import m2.port.Port;
import m2.role.Role;


public class Attachment extends Connector implements Observer {	
	
	private Port portConnect;
	private Role roleConnect;
			
	/**
	 * 
	 * @param role
	 * @param port
	 */
	public final void connectRoleToPort(Role role, Port port){
		portConnect = port;
		roleConnect = role;
		roleConnect.observBy(this);
	}
	
	/**
	 * 
	 * @param port
	 * @param role
	 */
	public final void connectPortToRole(Port port, Role role){
		portConnect = port;
		roleConnect = role;
		portConnect.observBy(this);	
	}

	@Override
	/**
	 * 
	 * @param observable
	 * @param object
	 */
	public void update(Observable observable, Object object) {
		
		if (observable instanceof Port ){
			Port observingPort = ((Port)observable);
			roleConnect.setRoleValue(observingPort.getPortValue());
			Message.putInLogger("Passage Port-Role\n" +					
					"- Role active : " + roleConnect.getClass().getSimpleName() + 
					", avec la valeur : " + roleConnect.getRoleValue() +
					" et de type : " + roleConnect.getType()+ 
					" (Connecteur proprietaire : " + roleConnect.getOwner() + ")\n" +
					"- Port ecoute : " + observingPort.getClass().getSimpleName() +
					" et de type : " + observingPort.getType() +
					" et de valeur : " + observingPort.getPortValue() +
					" (Composant proprietaire : " + observingPort.getOwner() + ")");
		}else if (observable instanceof Role ){
				Role observingRole = ((Role)observable);
				portConnect.activatePort(observingRole.getRoleValue());		
				Message.putInLogger("Passage Role-Port\n" +					
					"- Port active : " + portConnect.getClass().getSimpleName() + 
					", avec la valeur : " + portConnect.getPortValue() +
					" et de type : " + portConnect.getType()+ 
					" (Composant proprietaire : " + portConnect.getOwner() + ")\n" +
					"- Role ecoute : " + observingRole.getClass().getSimpleName() +
					" et de type : " + observingRole.getType() +
					" et de valeur : " + observingRole.getRoleValue() +
					" (Connecteur proprietaire : " + observingRole.getOwner() + ")");
		}
	}
	
	/**
	 * 
	 * @return
	 */
	public Role getRoleConnect(){
		return roleConnect;
	}
	
	/*public void reInitPortRoleObserving() {
		this.lastPortObserving = null;
		this.lastRoleObserving = null;
	}*/
	
}
